package com.fzf.org.service;

import com.fzf.org.dto.req.admin.AdminLoginReqDTO;
import com.fzf.org.dto.req.admin.AdminUpdateReqDTO;
import com.fzf.org.dto.req.admin.TakedownReqDTO;
import com.fzf.org.dto.req.admin.UserBanReqDTO;
import com.fzf.org.dto.req.user.UserRegisterReqDTO;
import com.fzf.org.dto.resp.admin.*;
import com.fzf.org.dto.resp.blog.BlogDetailRespDTO;
import com.fzf.org.dto.resp.blog.BlogPageRespDTO;
import com.fzf.org.page.PageRequest;
import com.fzf.org.page.PageResponse;
import org.springframework.web.multipart.MultipartFile;

public interface AdminService {

    String login(AdminLoginReqDTO adminLoginReqDTO);

    void logout();

    AdminSelfRespDTO profile();

    void updateAdminInfo(AdminUpdateReqDTO adminUpdateReqDTO);

    Boolean checkAccountIfNormal(String account);

    void uploadPicture(MultipartFile docxFile);

    void kickOutUser(String account);

    PageResponse<UserPageRespDTO> getUserInfoByPage(PageRequest pageRequest, Boolean status, String searchQuery);

    Boolean applyAccount(UserRegisterReqDTO userRegisterReqDTO);

    void banUser(UserBanReqDTO userBanReqDTO);

    void unBanUser(String account);

    UserDetailRespDTO getUserDetail(String account);

    PageResponse<UserAbnormalPageRespDTO> getAbnormalUserByPage(PageRequest pageRequest);

    PageResponse<BlogPageRespDTO> getBlogsByPage(PageRequest pageRequest, String name, String status, String searchQuery);

    BlogDetailRespDTO getBlogDetail(Long blogId);

    boolean takedownBlog(TakedownReqDTO dto);

    PageResponse<AuditRespDTO> getAuditByPage(PageRequest pageRequest);

}